package leetcode.array;

import java.util.Arrays;

/**
 * @Description: https://leetcode.cn/problems/pile-box-lcci/description/
 * @Author Ammar
 * @Create 2023/9/15 19:26
 */
public class _面试题_08_13_堆箱子 {

    public static void main(String[] args) {
        int[][] a = new int[3][3];
        a[0] = new int[]{1, 2, 2};
        a[1] = new int[]{2, 1, 1};
        a[2] = new int[]{3, 3, 3};
        new _面试题_08_13_堆箱子().pileBox(a);
    }


    public int pileBox(int[][] box) {
        // wi 宽
        Arrays.sort(box, (x, y) -> x[0] - y[0]);
        // 垒上去的箱子
        int[] dp = new int[box.length];
        // 要输出的 高度和
        int res = 0;
        // i 是箱子 2
        for (int i = 0; i < box.length; ++i) {
            // 第 j 个箱子 1
            for (int j = 0; j < i; ++j) {
                // i 的三维都要比 j 大
                if (box[i][0] > box[j][0] && box[i][1] > box[j][1] && box[i][2] > box[j][2]) {
                    //在 0 <= j < i 范围内找到最大的 dp[j]
                    dp[i] = Math.max(dp[i], dp[j]);
                }
            }
            //最后加上最底端箱子的高度
            dp[i] += box[i][2];
            res = Math.max(dp[i], res);
        }
        return res;
    }
}
